import mysql from 'mysql2/promise'
import fs from 'fs'
import path from 'path'
import { fileURLToPath } from 'url'
import dotenv from 'dotenv'

const __filename = fileURLToPath(import.meta.url)
const __dirname = path.dirname(__filename)

dotenv.config()

async function initDatabase() {
  let connection
  
  try {
    console.log('🔌 连接数据库...')
    
    // 创建数据库连接
    connection = await mysql.createConnection({
      host: process.env.DB_HOST,
      port: process.env.DB_PORT || 3306,
      user: process.env.DB_USER,
      password: process.env.DB_PASSWORD,
      database: process.env.DB_NAME,
      multipleStatements: true
    })
    
    console.log('✅ 数据库连接成功')
    
    // 读取并执行数据库结构文件
    console.log('📝 创建数据库表结构...')
    const schemaPath = path.join(__dirname, '../server/database/schema.sql')
    let schemaSql = fs.readFileSync(schemaPath, 'utf8')
    
    // 移除 USE 语句，因为我们已经在连接时指定了数据库
    schemaSql = schemaSql.replace(/USE\s+\w+;\s*/gi, '')
    
    // 将INSERT语句替换为INSERT IGNORE语句，避免重复键错误
    schemaSql = schemaSql.replace(/INSERT\s+INTO/gi, 'INSERT IGNORE INTO')
    
    // 分割SQL语句并逐个执行
    const sqlStatements = schemaSql.split(';').filter(stmt => stmt.trim())
    
    for (const statement of sqlStatements) {
      if (statement.trim()) {
        try {
          await connection.execute(statement.trim())
        } catch (error) {
          // 只显示非重复键错误
          if (!error.message.includes('Duplicate entry')) {
            console.warn('执行SQL语句时出现警告:', error.message)
          }
        }
      }
    }
    console.log('✅ 数据库表结构创建完成')
    console.log('\n🎉 数据库初始化完成！')
    console.log('📌 默认管理员账号：')
    console.log('   用户名：admin')
    console.log('   密码：123456')
    console.log('\n⚠️  请在生产环境中更改默认密码！')
    
  } catch (error) {
    console.error('❌ 数据库初始化失败:', error.message)
    process.exit(1)
  } finally {
    if (connection) {
      await connection.end()
    }
  }
}

// 运行初始化
initDatabase()